package it.csi.finregio.finreges.client.services;

import it.crp.crparch.web.struts.service.CRPStrutsService;
import it.crp.crparch.web.struts.service.WebServiceException;
import it.crp.exception.ServiceException;
import it.crp.logger.PrdLoggerFactory;
import it.csi.finregio.finreges.client.ServiceLocator;
import it.csi.finregio.finreges.dto.Classificazione;
import it.csi.finregio.finreges.dto.Scheda;
import it.csi.finregio.finreges.dto.SottoClassificazione;
import it.csi.finregio.finreges.dto.Stato;
import it.csi.finregio.finreges.integration.SchedaService;
import it.csi.finregio.finreges.presentation.form.SchedaForm;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;

public class CreateSchedaService implements CRPStrutsService {

	private Logger log = PrdLoggerFactory.getInstance().getLogger("finreges");

	public Object execute(ActionForm form) throws WebServiceException {
		log.info("[CreateSchedaService::execute] BEGIN");
		try {
			SchedaService service = new ServiceLocator().getSchedaService();
			SchedaForm schedaForm = (SchedaForm) form;
			Scheda scheda = new Scheda();
			scheda.setAnno(schedaForm.getAnno());
			scheda.setNoteClassificazione(schedaForm.getNoteClassificazione());
			scheda.setNoteTitolo(schedaForm.getNoteAlTitolo());
			scheda.setNumeroQuaderno(schedaForm.getNumeroQuaderno());
			Classificazione classificazione = new Classificazione();
			classificazione.setIdClassificazione(schedaForm.getClassificazione());
			scheda.setClassificazione(classificazione);
			if (!schedaForm.getSottoClassificazione().equals("-1")) {
				SottoClassificazione sottoClassificazione = new SottoClassificazione();
				sottoClassificazione.setIdSottoClassificazione(schedaForm
						.getSottoClassificazione());
				scheda.setSottoClassificazione(sottoClassificazione);
				schedaForm.setSottoClassificazione(sottoClassificazione.getIdSottoClassificazione());
			}
			Stato stato = new Stato();
			stato.setIdStato(schedaForm.getStatoScheda());
			scheda.setStato(stato);
			scheda.setTitolo(schedaForm.getTitolo());
			if (schedaForm.getIdScheda() != null) {
				scheda.setIdScheda(schedaForm.getIdScheda());
				scheda.setProgressivo(schedaForm.getProgressivo());
				scheda = service.aggiornaScheda(scheda);
			} else {
				scheda = service.createScheda(scheda);
			}
			schedaForm.setProgressivo(scheda.getProgressivo());
			schedaForm.setIdScheda(scheda.getIdScheda());
			return schedaForm;
		} catch (ServiceException e) {
			log.error("[CreateSchedaService::execute]  " + e.getMessage(), e);
			throw new WebServiceException(e.getMessage());
		} finally {
			log.info("[CreateSchedaService::execute] END");
		}
	}

}
